package others_request

import (
	"private-go-sdk/http"
	"private-go-sdk/model/common"
	"encoding/json"
)

type CrossborderDocumentCreatebytemplatesRequest struct {
	// <ext>core:true</ext> 【文件模板id集合】文件模板id集合 【传参】 多个文件模板id间使用逗号隔开
	TemplateIds string `json:"templateIds,omitempty"`
	// <ext>core:true;inner-type:Json<TemplateGroupQuery></ext> 【模板分组】模板分组 【作用】 传入模板分组，将使用该分组下的所有模板批量创建签署文档 【传参】 文件模板id集合与模板分组至少传入一个，均传入时取并集。
	TemplateGroup string `json:"templateGroup,omitempty"`
	// <ext>core:true</ext> 【签署文档名称】签署文档名称 【作用】 用于传入上传的签署文档的名称 【传参】 1、不传值默认为：模板名称。 2、传入签署文档名称时，传入的数量需要和文件模板的数量一致，使用逗号隔开
	Titles string `json:"titles,omitempty"`
	// <ext>core:true;inner-type:json<map>;key:string;value:map;key-description:文件模板id;value-description:参数信息</ext>  【模板参数值】模板参数值 【传参】 1、json格式字符串 2、key是模板id，value是填参json字符串（键值对的key为参数的唯一标识，支持传入参数的name或key；value为参数值） 3、当使用HTML模板时，value的json字符串的value值注意事项如下： 1）单行文本 传入文本内容，例如{\"单行文本\":\"这里是一段文本描述……\"}。 2）日期 格式为：yyyy-MM-dd，如：{\"日期\":\"2019-06-04\"}。 3）身份证号 仅支持15或18位的数字或字母，如：{\"身份证\":\"123456789123456789；\"}； 4）单选 仅支持传入单选的选项，如：{\"性别\":\"女\"}; 若传入其他选项： （1）需要填写补充内容，则传入格式为：其他选项名称{{补充内容}} （2）不需要填写补充内容，则传入：其他选项名称 5）多选 仅支持传入多选的选项，多个value用逗号隔开，如：{\"爱好\":\"乒乓球,篮球\"}；若传入其他选项： （1）需要填写补充内容，则传入格式为：其他选项名称{{补充内容}} （2）不需要填写补充内容，则传入：其他选项名称 6）表格 （1）参数名称即表格的Key值，参数值是一维数组且需转成字符串类型，数组的每项对应表格的每行，而每行中每一列的名称和值即对应列的key值和实际填写的值，转成字符串的一维数组示例：[{\\\"column1\\\":\\\"1\\\",\\\"column2\\\":\\\"2\\\",\\\"column3\\\":\\\"3\\\",\\\"column4\\\":\\\"4\\\"},{\\\"column1\\\":\\\"5\\\",\\\"column2\\\":\\\"6\\\",\\\"column3\\\":\\\"7\\\",\\\"column4\\\":\\\"8\\\"}]表示一个2行4列的表格。 （2）如若需要合并单元格，传参示例如下: [{\\\"column1\\\":\\\"1\\\",\\\"column2\\\":\\\"2\\\",\\\"column3\\\":\\\"3\\\",\\\"column4\\\":\\\"4\\\"},{\\\"column1\\\":\\\"5\\\",\\\"column2\\\":\\\"6\\\",\\\"column3\\\":\\\"7\\\",\\\"column4\\\":\\\"#.3\\\"}], #.1表示向左合并单元格，#.2表示向上合并单元格。#.3表示向左上合并单元格。 （3）表格的行数在传参的时候根据实际传入的会动态新增，但表格列不可动态新增，只能设置表格固定列为准 7）图片 需传入json字符串，包含value(base64图片包含base64前缀，必填)、fileName(图片名称，必填)两个参数，如：{\"fileName\":\"1.png\",\"value\":\"...\"}。 8）富文本 富文本形式的字符串，标签中的双引号需要用\\进行转义，如{\"富文本\": \"红色文字\"}。 9）邮箱 邮箱形式的字符串，如：{\"邮箱\":\"umklch01@163.com\"}。
	Params string `json:"params,omitempty"`
	// 【预览页展示下载按钮】预览页展示下载按钮 【传参】 取值范围：true（展示），false（不展示）；不传值默认为：false（不展示）。
	ViewDownload string `json:"viewDownload,omitempty"`
	TemplateGroupObject *common.TemplateGroupQuery `json:"templateGroupObject,omitempty"`
   ParamsMap map[string]string `json:"paramsMap,omitempty"`
}
func (obj CrossborderDocumentCreatebytemplatesRequest) GetUrl() string {
    return "/cross-border/document/createbytemplates"
}

func (obj CrossborderDocumentCreatebytemplatesRequest) GetHttpParameter() *http.HttpParameter {
    parameter := http.NewPostHttpParameter()
    parameter.AddParam("templateIds", obj.TemplateIds)
    parameter.AddParam("titles", obj.Titles)
    parameter.AddParam("viewDownload", obj.ViewDownload)
    if obj.TemplateGroupObject != nil {
       jsonBytes, _ := json.Marshal(obj.TemplateGroupObject)
       parameter.AddParam("templateGroup", string(jsonBytes))
   } else {
       parameter.AddParam("templateGroup", obj.TemplateGroup)
   }
    if obj.ParamsMap != nil {
        mapParameter := make(map[string]string)
        for key, value := range obj.ParamsMap {
            jsonStr, _ := json.Marshal(value)
            mapParameter[key] = string(jsonStr)
        }
        mapStr, _ := json.Marshal(mapParameter)
        parameter.AddParam("params", string(mapStr))
    } else {
        parameter.AddParam("params", obj.Params)
    }

    return parameter
}
